2012-02-03 7 views
2

я написал следующее правило в .htaccessRewriteRule не работает нормально

Options +FollowSymLinks 
RewriteEngine on 
RewriteRule ^(.*)/$ profile.php?business=$1 

Когда я введите URL, как http://www.abc.com/mujeeb/

страницы правильно перенесены на страницу профилей и страница выглядит хорошо.

Но я ввести это в URL http://www.abc.com/mujeeb

страница не показывает.

Не могли бы вы рассказать почему? Или написать правило для этого? я пробовал много раз, но не был успешным.

Mujeeb.

+0

Такая же проблема, как http://stackoverflow.com/questions/9066747/redirect-using-mod-rewrite – Gus

ответ

1

page doesn't show., потому что вы указали, что RewriteRule применяется к концу URL-адреса с / в конце. Перепишите его как

RewriteRule ^(.*)/?$ profile.php?business=$1 [L] 

И я надеюсь, что у вас есть дополнительные заявления RewriteCond в целях предотвращения зацикливания с редиректа.

пс: в основном вы можете предотвратить цикл в два пути

1) проверяет, что запрашиваемых URL не соответствует существующему файлу или каталогу. это, вероятно, лучший способ сделать (читать комментарии к второму методу)

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/?$ profile.php?business=$1 [L] 

2) проверяет, что вы запрашиваете не файл с RewriteRule. Этот метод не является хорошим, потому что для каждого запроса, даже для существующих файлов и каталогов, он вызывает profile.php скрипт

RewriteCond %{REQUEST_URI} !profile\.php$ 
RewriteRule ^(.*)/?$ profile.php?business=$1 [L] 
+0

No. я не имею никаких условий в коде. Какие условия я должен писать? –

+0

@Mujji В принципе вы можете написать две вещи. Позвольте мне обновить свой ответ - комментарии не подходят для кодовых списков :) – Cheery

0

Попробуйте это:

Options +FollowSymLinks 
RewriteEngine on 
RewriteRule ^(.*)[/]?$ profile.php?business=$1 

Это делает последний слэш необязательными.

+1

Нет причин, по которым вы должны поместить косую черту в класс символов. –

+0

Извините, я знаю. Привычка. И я вроде как n00b в RegEx. –

0

Ну правило является проверкой на слэш в URI и что причина /mujeeb/ работает, но /mujeeb не делает. Изменение кода:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
# If the request is not for a valid file 
#RewriteCond %{REQUEST_FILENAME} !-d 
# If the request is not for a valid directory 
#RewriteCond %{REQUEST_FILENAME} !-f 

# your rule without trailing slash 
RewriteRule ^(.*)$ profile.php?business=$1 [L,QSA] 
1

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

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteRule ^(.*)/?$ profile.php?business=$1 

RewriteCond необходимо, чтобы убедиться, что правило будет применяться только один раз. В противном случае Apache будет пойман в бесконечном цикле.

+0

страница не загружается, когда я ставлю правило как и сказал. –

+0

стр. Грузы, грузы и грузы .... ничего не показываю. –

+0

Да, вам нужно условие с 'RewriteCond', чтобы этого избежать. Либо используйте способ Хари, либо добавьте условие, которое я добавил в свой ответ. –

0

Много уже хороших ответов. Мой ответ немного другой.

Это то, что я обычно делаю. Если запрошенный URL-адрес не заканчивается /, я делаю браузер перенаправлен на URL с конечным /. Это соответствует поведению Apache по умолчанию (из-за mod_dir). Итак, вот как я решаю эту проблему.

RewriteEngine On 

# Canonicalize http://example.com/mujeeb to http://example.com/mujeeb/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)([^/])$ /$1$2/ [R=307,L] 

# Let profile.php process http://example.com/mujeeb/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ profile.php?business=$1 
+0

# КаноническаяФорма http://example.com/mujeeb к http://example.com/mujeeb/ RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule ^ (. *) [^ /] $/$ 1/[R = 307, L] –

+0

этот код уменьшает один символ с правой стороны и делает http://example.com/mujeeb на http://example.com/mujee/ –

+0

Простите, ошибка. Я исправил это сейчас. Это должно быть «RewriteRule^(. *) ([^ /]) $/$ 1 $ 2/[R = 307, L]' –

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