使用php无法正常工作的URL重写

时间:2014-06-16 11:11:04

标签: php apache .htaccess url-rewriting

我有我的网址 http://public_html.com/sub-products.php?catid=42

我希望它看起来像 http://public_html.com/sub-products/catid/42

我也制作了一个 .htaccess 文件。但我的网址仍然没有变化

Options +FollowSymLinks

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME}\.php -f

RewriteRule ^(.*)$ $1.php

RewriteRule   ^sub-products/catid/([0-9]+)/?$   sub-products.php?catid=$1 [L]

我是否还需要更改我的php文件中的任何内容?

php文件需要什么代码才能使用 .htaccess 文件?

3 个答案:

答案 0 :(得分:0)

也许你的专栏有目的

RewriteRule ^(.*)$ $1.php

但是我不能满足你的需要,所以我猜一个

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^sub-products/catid/([0-9]+)/?$ /sub-products.php?catid=$1 [L]

应该有用。

编辑:

如果您尝试访问http://public_html.com/sub-products/catid/42网址

,这应该有效

(或http://public_html.com/sub-products/catid/42/ btw)

如果您想要的是

http://public_html.com/sub-products.php?catid=42

http://public_html.com/sub-products/catid/42/

你可能需要这样的东西:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{QUERY_STRING} ^catid=([0-9]+)$
RewriteRule ^sub-products.php$ /sub-products/catid/%1/? [R=301,L]

然后,你可以使用我之前说的话。

答案 1 :(得分:0)

您在.htaccess中的规则仅使用php脚本文件名重写传入的seo-pretty URls到URL。但是如果您需要构建URL作为 / sub-products / catid / 42 ,则必须更改PHP代码,以呈现HTML输出。

例如

while ( $products as $product ) {
  echo '<a href="/sub-products/catid/"'.$product['id'].'>'.$product['name'].'</a>;
}

答案 2 :(得分:0)

我不确定你是否已经改变了你的第一个声明,但它会在你想要改写的.htaccess文件中找到相反的方式。也许这会奏效。

Options +FollowSymLinks
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} catid=([0-9]+)$
RewriteRule ^/?sub-products.php /sub-products/catid/%1 [R,L]

如果你想要一个更通用的规则,而不仅仅是catid这个RewriteRule可以工作:

RewriteCond %{QUERY_STRING} ([a-zA-Z]+)=([0-9]+)$
RewriteRule ^/?sub-products.php /sub-products/%1/%2 [R,L]

希望它可以帮助你前进。

编辑:在我的系统上测试后做了一些更改。