Исправление правил и условий перезаписи в файле HTACCESS - PullRequest
0 голосов
/ 31 декабря 2010

Хорошо, допустим, у меня есть следующий код в моем файле htaccess,

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,NC,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)$ $1.php

RewriteRule ^forums/([0-9]+) forums.php?category=$1 [NC]

Мне было интересно, как с помощью приведенного выше кода перенаправить определенные расширения в URL на страницу моего сайта 404.

Например, если эта ссылка mywebsite.com/forums имеет расширение в конце, такое как .asp, .php, .html и т. Д., То она будет перенаправлена ​​на мою страницу 404.

И вкратце: как я могу ограничить последний RewriteRule только определенной косой чертой, где mywebsite.com/forums/2 будет показывать страницу в порядке, и все, что после этого определенного ограничения, например mywebsite.com/forums/2/so on..., будет перенаправлено на мою страницу 404.

У кого-нибудь есть идеи?

1 Ответ

1 голос
/ 31 декабря 2010

Если я правильно понимаю вопрос, то вам нужно укрепить регулярные выражения так, чтобы они соответствовали только тем шаблонам, которые вам действительно нужны - на данный момент они слишком мягки для ваших нужд.

Дляпример:

RewriteRule ^([^/]+)$ $1.php

Это будет соответствовать любому без косой черты, тогда как если вы хотите ограничить его, чтобы соответствовать только, скажем, вещи без косой черты и состоять из буквенно-цифровых символов,тогда вы могли бы сделать это:

RewriteRule ^([a-zA-Z0-9]+)$ $1.php

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

Аналогично, ваш последний пример:

RewriteRule ^forums/([0-9]+) forums.php?category=$1 [NC]

будет соответствовать всему, что начинается со строки forums / , за которой следуют одна или несколько цифр, независимо от того, есть ли что-либо после этого.Добавление конечного якоря ($), как указано выше

RewriteRule ^forums/([0-9]+)$ ...

, подтвердит, что строка заканчивается после цифр.

Это зависит от того факта, что если mod_rewrite не может найти совпадение, он не будет пытаться переписать и будет (при отсутствии какого-либо явного ресурса по этому пути) переходить к обработке Apache 404, которую затем вы можете переопределить.

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