0

所以我有一个网站,我想通过使用 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 不能如此接近目标文件?

4

1 回答 1

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

当然,除非你看到它们有不同的命名。

于 2013-09-01T17:43:09.657 回答