Apache2 mod_rewrite模式限制?

时间:2013-09-01 17:22:57

标签: apache .htaccess mod-rewrite

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

我的规则:

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

现在这些规则并不完全正常。似乎如果我将文件重命名为blah.about.php和blah.faq.php并更改RewriteRule行以反映其工作的新文件名。

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

1 个答案:

答案 0 :(得分:1)

试试这个:

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然后回到它,因为它生成一个循环,所以我们做的是捕获请求并从那里重定向然后内部重定向到文件。

除非你看到他们有不同的命名。