【发布时间】:2013-05-04 14:06:41
【问题描述】:
首先,我知道周围有很多类似的问题,但是
- 它们似乎都不适合我
- 它们都没有真正解决我想要的问题
正如标题所暗示的,我想要的是将不带.php 扩展名的URL 重定向到实际的.php 文件——如果可能的话,更改URL(我认为这只是由[R=301] 处理的)。我最近尝试的是这样的:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ $1.php [R=301]
这行不通。我仍然无法使用/about 访问/about.php。 (虽然.htaccess 规则本身运行良好)
我理解 RegEx 很好,但 htaccess 规则只是让我头疼=[
那我该怎么办?
现在我知道你在想什么了
你们中的一个人会这样说:“你为什么要这样做?完全摆脱扩展程序并通过带有斜杠的/about 或/about/ 访问您的页面。”
我想这样做,看起来不错。问题是搜索引擎优化——我认为我的页面排名会被消灭,因为突然之间它们在不同的 URL 上。所以在你建议之前,建议我如何保持我的页面排名第一。
我实际上在做的实际上是缩短海报的网址——人们记住mywebsite.com/about 比记住mywebsite.com/about.php 要容易得多。
【问题讨论】:
-
您是否尝试过在重写规则中使用
L标志?RewriteRule ^(.*) $1.php [R=301,L] -
这不会阻止它下面的任何其他规则被执行吗?我的 .htaccess 中确实有更多规则。刚试了一下,还是不行=[
-
我认为您不需要 [R=301],只需按照 @KristerAndersson 的建议将其替换为 [L],因为您正在屏蔽/映射
-
还是不行!为什么是我!?我知道 mod_rewrite 肯定是通过我拥有的其他 RewriteRules 工作的 - 我尝试不使用这些其他规则,但我仍然没有效果,或者重定向循环 - 即使在清除我的浏览器缓存之后也是如此。
-
@Servant 是的,我清除了所有其他 Rewrite 代码,并在下面的答案中只使用了你的代码。我什至打开了 Internet Explorer。使用您的代码,如果我导航到
/about/gallery,则会显示 404 页面。地址栏中的 URL 仍为/about/gallery。
标签: .htaccess mod-rewrite