Подстановочный знак в URL (mod_alias или mod_rewrite) - PullRequest
2 голосов
/ 29 июля 2011

Мне нужно иметь URL-адреса, такие как mydomain.com/whatever, где «что угодно» может быть любой произвольной строкой, все они вызывают один и тот же php-файл, где он сортирует, что отображать (или отображает 404).Тем не менее, я хочу, чтобы файлы и другие php-файлы работали нормально (что-либо, что является псевдонимом в противном случае, или что на самом деле существует в файловой системе).

Простой AliasMatch /* myphpfile.php (после всех других псевдонимов в httpd.conf) отлично работает на моей собственной установке, но на рабочем сервере подстановочный псевдоним отправляет все остальные php-файлы на myphpfile.php.Я не уверен, что еще может сбить с толку.

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

1 Ответ

2 голосов
/ 29 июля 2011

Используйте эти правила (вам нужно mod_rewrite ):

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

# do not do anything for already existing files
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .+ - [L]

RewriteRule ([a-z]+) /myfile.php [L]
  1. Поместить в .htaccess в корневую папку сайта. При размещении в другом месте может потребоваться некоторая настройка.

  2. Это перезапишет (внутреннее перенаправление) все НЕ СУЩЕСТВУЮЩИЕ запросы с одним строчными буквами в /myfile.php, где с помощью скрипта $_SERVER['REQUEST_URI'] можно определить, какой URL был вызван, и решить, что делать (маршрутизация).

  3. Это будет работать для URL, таких как /whatever, но ничего не будет делать для /what-ever, /hello/pinky, /hello123.

...