1

我试图在我的网络服务器上实现一些非常简单的东西。我希望以 .php 结尾的网址以 / 结尾,例如 www.example.net/something.php 为 www.example.net/something 或 www.example.net/folder/subfolder/something.php 为 www。 example.net/folder/subfolder/something。此外,我不介意我是否有 www.example.net/folder/something.php?something=whatever/。我只关心删除 url 中的最后一个 .php 。我在许多其他代码中都使用过此代码。

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule .*[^/]$ $0/ [L,R=301]
RewriteRule (.*)/$ $1.php [L]

但是,这只适用于我的某些页面。例如,它不适用于我的 www.example.com/folder/contactus.php 页面。相反,我得到了我的 404 页面。但它可以完美地在 www.example/folder/faq.php 上运行。此外,我在代码的各个部分中提出了一些 file_get_contents() php 请求。有没有办法定制这些规则,所以内部请求(我的 php 函数)不受影响。基本上,我只希望浏览器显示没有 .php 结尾的 url,而不会影响 .php 文件中保存的其他 php 函数。为了进一步澄清我的意图:我使用字符串处理函数根据我设置的变量从 php 文件中提取特定的文本行。但是根据当前的重写规则,找不到 php 文件,因为扩展名已从文件名中删除(我猜。

$file_contents = file_get_contents($filename);

我目前在共享的 Godaddy 主机帐户上使用 linux 服务器。

4

2 回答 2

0

我认为您需要将 php 检查应用于这两个规则:

RewriteCond %{REQUEST_URI} ^(.*)/$
RewriteCond %{DOCUMENT_ROOT}%1.php -f 
RewriteRule (.*)/$ $1.php [L]

RewriteCond {REQUEST_FILENAME}.php -f
RewriteRule .*[^/]$ $0/ [L,R=301]

此外, -f 检查需要在没有尾部斜杠的情况下进行

于 2012-07-27T22:25:06.293 回答
0

尽管我的一个页面使用了失败的获取请求,但以下内容按要求工作。我只是将其更改为发布请求,一切都很好。

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^GET\ /([^.\ ]+\.)+php(\?[^\ ]*)?\ HTTP
RewriteRule ^(.+)\.php$ http://www.sitename.net/$1 [R=301,L]
RewriteRule ^([^/]+/)*index/?$ http://www.sitename.net/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ http://www.sitename.net/$1 [R=301,L]
RewriteCond $1 !^([^.]+\.)+([a-z0-9]+)$ [NC]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*[^/])$ /$1.php [L]
RewriteRule (.*)/$ $1.php [L]

一个小问题仍然存在。有些页面附加了斜杠,而另一些则没有。关于强制斜杠的任何线索?

于 2012-07-28T15:59:58.213 回答