RegEX для перезаписи URL, если НЕ ".php" в пути - PullRequest
0 голосов
/ 22 июня 2009

мой босс хочет, чтобы я закодировал URL-адрес для, скажем, «http://our.domain.com/SomeText"», то есть, если URL-адрес НЕ содержит «.php» или «.html», он должен обрабатываться скриптом как "http://our.domain.com/process.php?string=SomeText". Возможно ли это с помощью простого регулярного выражения? Я просто не могу найти правильное выражение для этого. Я начал с перенаправления запросов к некоторому специальному подкаталогу, но теперь он должен работать напрямую без каких-либо дополнительных подкаталогов, поэтому мне как-то приходится разделять обычные запросы на существующие страницы на запросы, которые не содержат «.php» или «.html» .

Любой совет или ссылку для меня?

С наилучшими пожеланиями, Римский.

Ответы [ 4 ]

1 голос
/ 22 июня 2009

Нечто подобное должно сработать

RewriteEngine on
RewriteCond %{REQUEST_URI} !\.php
RewriteCond %{REQUEST_URI} !\.html
RewriteRule (.*) /process.php?string=$1 [QSA]

есть некоторые предостережения относительно того, будет ли это идти в .htaccess или непосредственно в определении VirtualHost (ставить или не быть ведущим /).

Дополнительно вы должны загрузить mod_rewrite.

Все это предполагает, что вы на самом деле используете Apache и можете использовать mod_rewrite.

Это означает, что если запрошенный URI не содержит строки .php и .html, он внутренне перенаправляет запросы в файл process.php с тем, что записано как аргумент строки запроса.

Если у вас есть проблемы с этим, используйте

RewriteLog "/tmp/rewrite.log"
RewriteLogLevel 9

и проверьте, как это работает. Чтобы это работало, вы должны контролировать сервер, так как он должен использоваться в основном файле конфигурации (нет возможности .htaccess).

0 голосов
/ 22 июня 2009

Используя mod_rewite, вы можете сделать это для перезаписи URL .php и .html следующим образом:

RewriteEngine on
RewriteRule !\.(php|html)$ process.php/$1 [NC] [QSA]

Однако вы также можете помешать перезаписи URL-адресов в файлы, которые действительно существуют. (Могут быть и другие файлы - images / css и т. Д., Которые вы не хотите переписывать). Вы можете изменить вышеприведенное, добавив проверки:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(php|html)$ process.php/$1 [NC] [QSA]

Добавление этой проверки может означать, что вам на самом деле не нужно проверять, является ли расширение чем-то отличным от .php или .html, потому что вы знаете, что оно будет перезаписано только в том случае, если запрошенный файл не существует, поэтому вы можете изменить строка RewriteRule должна быть такой:

RewriteRule ^(.*)$ process.php/$1 [NC] [QSA]

Это будет означать, что любой запрошенный URL, который не существует как файл, будет обработан process.php.

0 голосов
/ 22 июня 2009

По крайней мере, с помощью mod_rewrite вы можете использовать регулярное выражение, которое соответствует .php и .html, а затем добавить к нему знак!, Что должно его отрицать.

0 голосов
/ 22 июня 2009

почему вы не используете мод переписать?

ссылка для объяснения:

http://www.workingwith.me.uk/articles/scripting/mod_rewrite

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