【问题标题】:Using RewriteCond to change my links使用 RewriteCond 更改我的链接
【发布时间】:2013-07-04 05:25:28
【问题描述】:

我是这里的新手。我正在尝试清理我的链接。我尝试查看这里的一些答案。我确定我什至没有接近....!你能帮我解决这个问题吗?

目前我的链接结构是这样的...

xyz.com/viewgallery.php?cname=Colorado-Fall&pcaption=Touched-By-Light

但我希望观众看到这个链接xyz.com/viewgallery/Colorado-Fall/Touched-By-Light(这意味着重定向?)

然后重写回我的链接。 ( ?? 我是这样理解的)...

所以我写了...

检查是否为“this1”的实际请求

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /viewgallery.php\?cname=(.*)&pcaption=(.+)

# redirect to "this2"
RewriteRule ^viewgallery\.php /%1/%2/?%3 [R=301,L]

# now rewrite "this2" back to "this1"
RewriteRule ^(.*?)/(.+)$ /viewgallery.php?cname=$1&pcaption=$2 [L,QSA]

这是正确的吗?我敢肯定它看起来像胡言乱语..对此感到抱歉!...

感谢您的帮助..

【问题讨论】:

    标签: .htaccess url mod-rewrite url-rewriting


    【解决方案1】:

    通过httpd.conf启用mod_rewrite和.htaccess,然后把这段代码放到你.htaccessDOCUMENT_ROOT目录下:

    Options +FollowSymLinks -MultiViews
    # Turn mod_rewrite on
    RewriteEngine On
    RewriteBase /
    
    # externally redirect /viewgallery.php?cname=Colorado-Fall&pcaption=Touched-By-Light to 
    # /viewgallery/Colorado-Fall/Touched-By-Light to 
    # RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(viewgallery)\.php\?cname=([^&]+)&pcaption=([^&\s]+) [NC]
    # RewriteRule ^ /%1/%2/%3? [L,R=301,NE]
    
    # internally forward /viewgallery/Colorado-Fall/Touched-By-Light to 
    # /viewgallery.php?cname=Colorado-Fall&pcaption=Touched-By-Light
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}/$1.php -f
    RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ /$1.php?cname=$2&pcaption=$3 [L,QSA]
    

    说明:

    1. 规则 1 用于外部重定向以使您的 URL 更漂亮
    2. 它在 %1、%2、%3 中捕获“viewgallery”以及参数 cname 和 pcaption 的值
    3. 此后这些捕获的变量用于创建漂亮的 URL /viewgallery/%2/%3
    4. 规则 2 适用于内部转发
    5. 从 URL:/viewgallery/Colorado-Fall/Touched-By-Light 它将 3 个变量:“viewgallery”、“Colorado-Fall”和“Touched-By-Light”捕获为 $1、$2、$3
    6. 捕获的变量用于构造真实的 URL:/viewgallery.php?cname=$2&pcaption=$3

    更新:

    # /viewgallery.php?cname=Colorado-Fall&pcaption=Poked to /photos/Colorado-Fall/Poked.jpg
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+viewgallery\.php\?cname=([^&])+&pcaption=([^&\s]+) [NC]
    RewriteRule ^ /photos/%1/%2.jpg? [R=301,L]
    
    RewriteRule ^photos/([^/]+)/([^.]+)\.jpg$ /viewgallery.php?cname=$1&pcaption=$2 [QSA,L,NC]
    

    【讨论】:

    • Anubhava...谢谢您的回答。我已将您的答案复制并粘贴到我的 .htaccess 文件中,但它没有改变任何内容。我应该在您的答案中更改/添加任何内容吗?
    • 不,我也测试过。在您的问题中复制/粘贴您最新的 .htaccess。你用什么 URI 来测试?以及在您的目录结构中放置此 .htaccess 文件的位置。
    • Anubhava...我服务器上的根文件夹是 /home/rajeev/htaccess 并在该文件中粘贴了您的代码。这是一个工作链接,该代码位于我的 .htaccess 文件中。 http://www.rajeevthomas.com/viewgallery.php?cname=Colorado-Journies&pcaption=Shadows-And-Mysteries 当您在页面上单击图像时,它将导航到下一个图像。奇怪的是,代码去掉了上一个/下一个按钮。再次感谢..
    • 啊,你有pcaption,我在第一条规则中使用了caption:P
    • 进行了编辑,请立即检查。另外关于您的上一个,下一个按钮,请确保对图像、css、js 文件等使用绝对路径,因为在使用漂亮的 URL 后相对路径将不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    相关资源
    最近更新 更多