Apache2 mod_rewrite模式限制



所以我有一个网站,我想通过使用mod_rewrite使SEO友好。我想通过删除URL末尾的.php并在稍后使用mod_rewrite重新附加它们来使URL易于记忆http://example.com/about会指向http://example.com/about.php.根据我的经验,我有一个"重写规则"应该有效,但由于某种原因没有。

我的规则:

RewriteEngine On
RewriteRule ^/?about$ about.php [L]
RewriteRule ^/?faq$ faq.php [L]

现在这些规则并不是这样运作的。似乎如果我将文件重命名为blah.about.php和blah.faq.php,并更改"重写规则"行以反映新的文件名,它就可以工作了。

这是mod_rewrite的限制吗?Pattern不能如此接近目标文件?

试试这个:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}s/+(.*).php [NC]
RewriteRule ^ /%1 [R=301,QSA,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([^/]+)/?$ $1.php [L]

第一条规则将请求重定向到phpless页面,下一条规则在内部重定向到php文件本身。

这是mod_rewrite的限制吗?Pattern不能如此接近目标文件?

这并不是一个真正的限制,你只是不能将php文件重定向到非php,然后在它生成循环时返回到它,所以我们要做的是捕获请求并从那里重定向,然后在内部重定向到文件。

当然,除非你见过它们有不同的名字。