0

我有一个带有参数的 URL,我希望将其转换为 sef URL:

想:

http://map.tautktiv.com/street.php?address=abc

成为:

http://map.tautktiv.com/street/address/abc

或者

http://map.tautktiv.com/address/abc

尝试了几种在线工具来生成.htaccess规则,但它们都对 URL 没有任何影响,.htaccess文件处于活动状态(试图在其中放入一些乱码并得到错误 500)

这些是我尝试过的规则:

1.

Options +FollowSymLinks
RewriteEngine on

RewriteRule ^address-([^-]*)$ /street.php?address=$1 [L]
RewriteRule street/address/(.*) street.php?address=$1

2.

Options +FollowSymLinks
RewriteEngine on

RewriteRule /address/(.*)\.php street.php?address=$1

3.

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# add whatever other special conditions you need here

RewriteRule ^/([0-9]+)-(.*)$ /street.php?address=$1 [L]
RewriteRule /(.*)/(.*)/$ street.php?address=$1

该站点是一个子域,其中文件驻留在共享托管 GoDaddy 服务器的子目录中,还尝试将这些规则应用于其.htaccess上方目录中的目录,结果相同。

根据以下建议也尝试过

Options +FollowSymLinks
RewriteEngine on 

RewriteBase /

RewriteRule ^street/address/(.*)$ street.php?address=$1 [r=301,L]
RewriteRule ^address/(.*)$ street.php?address=$1 [r=301,L]
RewriteRule ^street/address/(.*)$ street.php?address=$1 [r=301,L]

同样的结果,什么也没有发生。

试图直接从主域转到页面,但结果相同:

http://tautktiv.com/map/streets/street.php?address=abc
4

2 回答 2

1

第一条规则会将你丑陋的 URL 重定向到漂亮的 URL。第二条规则将在内部将其重定向回来,因此用户不会看到丑陋的 URL。

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

# Internally forward /street/address/abc to /street.php?address=abc
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^street/address/(.*)/?$ /street.php?address=$1 [NC,L]

# Internally forward /address/abc to /street.php?address=abc
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^address/(.*)/?$ /street.php?address=$1 [NC,L]

如果您确认规则按预期工作,那么您可以将其从 302 更改为 301,因为在您知道规则按预期工作之前,您不想使用 301。

.htaccess应该放在所在的文件夹内street.php

HTTP 是 US ASCII,因此您的语言会失败,它会将其重定向到如下内容:

/街道/地址/%25D7%2590%2520%25D7%2598%25D7%2591%25D7%25A8%25D7%2599%2520%25D7%2599%25D7%25A8%25D7%2595%25D7%25A9%25D7%259C% 25D7%2599%25D7%259D%2520%25D7%2599%25D7%25A9%25D7%25A8%25D7%2590%25D7%259C

您最好的选择是直接更改要使用的链接/street/address/word而不是 php 文件。

这样你就不需要第一条规则,你可以只使用内部重定向,这在这个更新中可以正常工作。

于 2013-08-09T14:22:36.383 回答
0

试试这个:

RewriteEngine on 

RewriteRule ^street/address/(.*)$ street.php?address=$1 [r=301,L]
RewriteRule ^address/(.*)$ street.php?address=$1 [r=301,L]

在您的示例中,您错过^$RewriteRule 的第二行。

并使用[r=301,L]而不是[L]告诉浏览器,这是永久重定向。

于 2013-08-09T10:06:03.073 回答