.htaccess友好的网址问题

时间:2015-04-24 20:52:04

标签: apache .htaccess mod-rewrite

我正在我的网站上实施友好的网址。

目前我有一些规则可行,但仍然需要帮助来实施最后的规则。

工作规则:

RewriteRule ^SobreNos$ /about.php [L]
RewriteRule ^Contactos$ /contact.php [L]

规则工作但不是我想要的:

RewriteRule ^catalogo-([a-zA-Z0-9]+)$ catalogo.php?cat=$1

规则不起作用:

RewriteRule 
^products/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ product.php?id=$1&ref=$2&cat=$3 [L]

关于第3条规则,我想要友好的URL catalogo / homem并尝试更改 - 为/但没有用。

第4条规则根本不起作用,或 - 或/。

可能是服务器版本的问题?这是服务器“Apache ver.2.2.19(Unix)”的版本。

我的.htaccess文件

RewriteBase /
Options -Indexes 
Options +FollowSymLinks
RewriteEngine on

RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteRule ^SobreNos$ /about.php [L]
RewriteRule ^Contactos$ /contact.php [L]
RewriteRule ^catalogo-([a-zA-Z0-9]+)$ catalogo.php?cat=$1
RewriteRule   
 ^products/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$    product.php?id=$1&ref=$2&cat=$3    [NC,L]

2 个答案:

答案 0 :(得分:0)

我已将您的文件重新格式化为以下内容:

Options -Indexes
Options +FollowSymLinks

RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteRule ^SobreNos$ about.php [L]
RewriteRule ^Contactos$ contact.php [L]
RewriteRule ^catalogo/([a-z0-9]+)/?$ catalogo.php?cat=$1 [NC,L]
RewriteRule ^products/([a-z0-9-]+)/([a-z0-9-]+)/([a-z0-9-]+)/?$ product.php?id=$1&ref=$2&cat=$3 [NC,L]

以下是我改变的内容:

  1. RewriteBase向下移至RewriteEngin on
  2. 删除了每条规则的目标中的主斜杠(因为RewriteBase已设置,因此不需要它们)
  3. 从表达式中删除A-Z(因为设置了NC,无案例,标记)
  4. 在第3和第4规则中使用斜杠,并附加可选的结束斜杠。
  5. 我的测试表明一切正常。抛出404的唯一原因是,您重写的文件(例如 product.php )不存在。

答案 1 :(得分:0)

我有解决问题的方法。

Options -Indexes 
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]


RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ catalogo.php?cat=$1 [L,QSA]


RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/.]+)/([^/]+)$ catalogo.php?cat=$1&scat=$2 [L,QSA]

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)$ product.php?cat=$1&scat=$2&name=$3&id=$4 [L,QSA]

仍然需要为about.php和contactos.php添加重写规则,但不是一个大问题。