Я знаю, что это очень популярная тема, и это было ближе всего к моему запросу, но это не решает мою проблему: Как сделать правило перезаписи в php?
Я хотел бы, чтобы www.example.com/hello
фактически загрузил этот скрипт: www.example.com/hello.php
, также известный как: www.example.com/*
to www.example.com/*.php
.
Кроме того, я мог бы захотеть передать vars, но всегда иметь первую косую черту в качестве имени сценария, а все последующие — в vars, например, www.example.com/world/africa
фактически запустит этот скрипт:www.example.com/world.php?var1=africa
или www.example.com/beach/us/michigan
будет выполняться:www.example.com/beach.php?var1=us&var2=michigan
У меня нет контроллера, и я хотел бы оставить его таким. Я работаю над очень маленьким сайтом, максимум 10 страниц.
Я пробовал много итераций, но самое близкое, что я могу сделать, это: www.example.com/dir/hello
для загрузки www.example.com/hello.php
, но мне не нужен этот дополнительный каталог в URL-адресе, который видит конечный пользователь. Я достиг этого с помощью этого правила:RewriteRule ^dir/(.*)$ /$1
У меня они включены в верхней части файла .htaccess, в documentRoot
RewriteEngine on
RewriteBase /
Я закомментировал условия. Теперь ни один из них не работает для меня (Apache2). В приведенном ниже списке я пробовал много вариантов с косой чертой, без нее и т. д. Есть идеи?
#RewriteCond %{REQUEST_FILENAME}.php -f
#RewriteRule ^(.*)$ $1.php
#RewriteRule .* $0.php
#RewriteCond %{DOCUMENT_ROOT}/$0.php -f
#RewriteRule .* /$0.php [L]
#RewriteRule ^/([^.]+)$ /$1.php
#RewriteRule ^([^/]+).*$ $1.php
#Rewritstrong texteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule ^(.*)$ index.php?page=$1
#RewriteRule !\.(js|ico|txt|gif|jpg|png|css)$ index.php?page=$1 [L,QSA]
# this works but shows 'dir' in URI: RewriteRule ^dir/(.*)$ /$1.php
#RewriteRule (^|/)([^.]+)$ $2.php [QSA]
#RewriteRule (.*) /$1.php
#RewriteRule ^([^/]+)/$ /$1.php
RewriteRule ^([^.]+?)(/[\w/]*?)$ $1.php?var2=$2
, которое приведет кhttp://www.example.com/bill/wind/surf' serves this script: 'http://www.example.com/bill?var2=/wind/surf
. Это будет работать, так как в сценарии $1.php мне просто нужно будет манипулировать var2 как:<?php $var2 = substr($_GET['var2'],1,strlen($_GET['var2'])-2); $qs = explode('/',$var2); array_unshift($qs,count($qs));
- person dmayo   schedule 13.04.2012