.htaccess简单的URL重写

时间:2014-01-04 02:12:55

标签: php apache .htaccess mod-rewrite

以下是.htaccess,我有(已更新)

Options -Multiviews
Options +FollowSymLinks  
RewriteEngine On  

RewriteBase / #saw this on many examples online, not sure exactly what purpose it serves

RewriteCond %{REQUEST_FILENAME} !-d  
RewriteCond %{REQUEST_FILENAME} !-f  

RewriteRule ^/(.*)/(\w+.php)$ news.php?post=$2&cat=$1 

基本上,我希望网址看起来像:

  • phovze.com/WineGlass/Vin.php
  • phovze.com/Chandelier/Auto.php

要翻译成:

  • phovze.com/news.php?post=Vin.php&cat=WineGlass
  • phovze.com/news.php?post=Auto.php&cat=Chandelier

有一些php代码可以防止加载错误的页面,所以希望使用'*'不会那么冒险。

知道为什么这不起作用吗?

修改 我按照下面的建议改变了这一行:

RewriteRule ^(.*)/(.*)$ ./news.php?cat=$1&post=$2

这返回了500错误但是,同一帖子提示我添加/因为“它开始在.com之后解析”(粗略引用)。这摆脱了500错误,但网站仍然返回404:

RewriteRule ^/(.*)/(.*)$ ./news.php?cat=$1&post=$2

编辑2: 确切的错误: 在此服务器上找不到请求的URL / poz / WineGlass / Vin。

此外,尝试使用ErrorDocument处理请求时遇到404 Not Found错误。

我也尝试了以下内容:

RewriteRule ^./poz/(.*)/(.*)$ ./news.php?post=$2&cat=$1

poz是phovze.com的根文件夹

编辑3: 通过持续的网络研究,看起来GoDaddy.com服务器需要-Multiviews,但即使禁用此功能,问题仍然存在。

编辑4: 使用RegExr验证正则表达式

看起来好像服务器没有看到URL需要重写,只是试图访问不存在的文件。也许我的表达不正确?

编辑5: 在做了很多测试后,看起来服务器没有确定需要重写所请求的URL。我已经多次更改RewriteCond以使其按照此处的信息运行:

然而,我未能让它发挥作用。

显示文件夹/ p​​oz /的错误似乎显示每404,所以我不再相信这是问题。我现在认为问题是URL要么没有绊倒要考虑重写的条件,要么表达式中的模式与URL不匹配。

1 个答案:

答案 0 :(得分:0)

试试这个:

RewriteRule ^(.*)/(.*)$ ./news.php?post=$2.php&cat=$1

我认为在重写规则中使用phovze.com部分是个问题,因为RewriteRule的第一个参数仅在.com/

之后开始匹配