2015-01-26 4 views
1

У меня очень маленький вопрос. Я создал файл .htaccess, который предположил бы переписать условие example.com/user/foo/bar как example.com/user.php?username=$1&tab=$2, поэтому имя пользователя будет foo, а вкладка просмотра должна быть баром.Почему example.com/foo/ работает, но example.com/foo нет?

Но когда нет данных о барах, предоставляемых точно так же, как example.com/user/foo/, он переходит к пользователю с вкладкой по умолчанию (вкладка по умолчанию создается в файле script.php).

Но я видел какой-то веб-сайт, что они могут делать это просто как example.com/user/foo, без/в строке. Когда я делаю example.com/foo, чтобы перейти к пользователю, он говорит, что страница не найдена. Моя корреспондирующая линия .htaccess:

RewriteEngine On 
RewriteRule ^user/(.*)/(.*)$ user.php?username=$1&tab=$2 [L] 

Пожалуйста, помогите мне с этим соотношением.

+0

В основном ваше правило требующем URL имеют два не -leading '/' в нем, но '/ foo/bar' содержит только ONE non-leading'/', поэтому не будет соответствовать. –

ответ

5

Ваше правило матча ^user/(.*)/(.*)$, что означает, что второй слэш должен быть там (так как это указано), но текст впоследствии не является обязательным (поскольку * соответствует нулю или более символов).

Действительно, я бы добавил два правила перезаписи для выполнения обоих действий (и для предотвращения использования сложного регулярного выражения), например.

RewriteRule ^user/(.*)/(.*)$ user.php?username=$1&tab=$2 [L] 
RewriteRule ^user/(.*) user.php?username=$1 [L] 
2

В качестве альтернативы, вы можете сделать 2-й параметр необязательный:

RewriteRule ^user/([^/]+)/?(?:(.*)|)$ user.php?username=$1&tab=$2 [L] 

До тех пор, пока вы не возражаете, не имея никакого значения для $_GET['tab']

Смежные вопросы