#php #apache #.htaccess #mod-rewrite #url-rewriting
#php #apache #.htaccess #mod-переписать #url-перезапись
Вопрос:
Мои правила перезаписи таковы:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^([A-Za-z0-9_]*)/?$ index.php?a=$1 [NC]
RewriteRule ^([A-Za-z0-9_]*)/([A-Za-z0-9_]*)/?$ index.php?a=$1amp;b=$2 [NC]
RewriteRule ^([A-Za-z0-9_]*)/([A-Za-z0-9_]*)/([A-Za-z0-9_]*)/?$ index.php?a=$1amp;b=$2amp;c=$3 [NC]
URLhttp://example.com/home/test/b вернет внутренний эквивалент index.php?a=homeamp;b=testamp;c=b. Хотя это здорово (вчера я опубликовал здесь, пытаясь заставить mod_rewrite работать), я хотел бы создать URL, подобныйhttp://example.com/home/test/b.php для внутреннего вызова index.php?a=homeamp;b=testamp;c=b.php вместо того, чтобы Apache пытался найти (безуспешно) /var/www/home/test/b.php . Я хотел бы, чтобы мое правило перезаписи фактически обрабатывало все расширения файлов.
Ответ №1:
Вы можете использовать: этот код:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([w.] )/?$ index.php?a=$1 [L,QSA]
RewriteRule ^(w )/([w.] )/?$ index.php?a=$1amp;b=$2 [L,QSA]
RewriteRule ^(w )/(w )/([w.] )/?$ index.php?a=$1amp;b=$2amp;c=$3 [L,QSA]
[w.]
в символьном классе позволит [a-zA-Z0-9._]
Ответ №2:
Если вы просто хотите обрабатывать расширения файлов, вы можете сделать это вручную, изменив последнюю строку на :
RewriteRule ^([A-Za-z0-9_]*)/([A-Za-z0-9_]*)/([A-Za-z0-9_]*(.[a-z] )?)/?$ index.php?a=$1amp;b=$2amp;c=$3 [NC]
Добавив (.[a-z] )?
, это обработало бы http://example.com/home/test/b.php
, а затем дало бы вам, с var_dump($_GET);
в index.php
:
array(3) { ["a"]=> string(4) "home" ["b"]=> string(4) "test" ["c"]=> string(5) "b.php" }
Надеюсь, это поможет.
Примечание: Он будет обрабатывать только одно .
, имея по крайней мере одно [a-z]
после него.
Если вы хотите обработать что-то вроде http://example.com/home/test/b.test.php
, вам понадобится :
RewriteRule ^([A-Za-z0-9_]*)/([A-Za-z0-9_]*)/([A-Za-z0-9_]*(.[a-z] )*)/?$ index.php?a=$1amp;b=$2amp;c=$3 [NC]