我知道这是一个非常受欢迎的话题,这是最接近我的要求,但它并没有解决我的问题:如何在 php 中制定重写规则?
我想www.example.com/hello
实际加载这个脚本:www.example.com/hello.php
,又名:www.example.com/*
到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