以 SEO 友好的方式重写 HTTaccess 中的复杂 URL


rewrite in seo friendly way complex url in htaccess

嗨,我正在开发一个网站,所有.php文件都位于服务器上的主文件夹中(.htaccess 所在的位置)。因此 index.php 和 productDetail.php 位于同一文件夹中。我想重定向这样的网址:

http://www.mywebsite/productDetail/PRODUCTNAME

http://www.mywebsite/productDetail.php?product=PRODUCTNAME

这样我就可以链接第一个链接版本而不是第二个链接版本。

我还需要重定向更复杂的版本,例如:

http://www.mywebsite/PRODUCTCATEGORY/PRODUCTSUBCATEGORY/productDetail/PRODUCTNAME

http://www.mywebsite/productDetail.php?product=PRODUCTNAME&category=PRODUCTCATEGORY&subcategory=PRODUCTSUBCATEGORY

我的.htaccess目前使用以下规则,我认为这些规则使此操作变得非常困难,因为我已经做了很多时间了:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}'s([^.]+)'.php [NC]
RewriteRule ^ %1 [R,L,NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]
RewriteCond %{THE_REQUEST} !'s/(it|en)/ [NC]
RewriteCond %{HTTP:Accept-Language} ^it [NC]
RewriteRule ^ /it%{REQUEST_URI} [L,NC,R=301]
RewriteCond %{THE_REQUEST} !'s/(it|en)/ [NC]
RewriteRule ^ /en%{REQUEST_URI} [L,NC,R=301]
RewriteRule ^(en|it)/(.*)$ $2?lang=$1 [L,QSA,NC]

任何帮助将不胜感激。多谢

试试这些规则:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}'s([^.]+)'.php [NC]
RewriteRule ^ %1 [R,L]
RewriteCond %{THE_REQUEST} !'s/(it|en)/ [NC]
RewriteCond %{HTTP:Accept-Language} ^it [NC]
RewriteRule ^ /it%{REQUEST_URI} [L,NC,R=301]
RewriteCond %{THE_REQUEST} !'s/(it|en)/ [NC]
RewriteRule ^ /en%{REQUEST_URI} [L,NC,R=301]
RewriteRule ^(en)/(productDetail)/(['w-]+)/?$ $2.php?lang=$1&product=$3 [L,QSA,NC]
RewriteRule ^(it)/(dettagliProdotto)/(['w-]+)/?$ $2.php?lang=$1&product=$3 [L,QSA,NC]
RewriteRule ^(en)/(['w-]+)/(['w-]+)/(productDetail)/(['w-]+)/?$ $4.php?lang=$1&product=$5&category=$2&subcategory=$3 [L,QSA,NC]
RewriteRule ^(it)/(['w-]+)/(['w-]+)/(dettagliProdotto)/(['w-]+)/?$ $4.php?lang=$1&product=$5&category=$2&subcategory=$3 [L,QSA,NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
RewriteRule ^(en|it)/(.*)$ $2?lang=$1 [L,QSA,NC]

您可以使用以下形式的规则:

RewriteEngine on

RewriteRule ^productdetail/productname/?$ /productdetail.php?productname [NC,L]

正则表达式模式的规则:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/.]+)/?$ /productdetail.php?productname [NC,L]

这会在内部将/productDetail/foo 重定向到/productDetail.php?product?foo。