php - quitar - Htaccess: agregar/eliminar barra diagonal desde la URL
remove php url htaccess (4)
Mi sitio web ejecuta un script llamado -> guión de fondo de pantalla de WSS
Mi problema -> He intentado eliminar o agregar una barra al final de mi URL para evitar contenido duplicado y también para limpiar mis URL.
Lo intenté de todo y probé todo lo que pude pensar y cargas de los interwebs, ¡pero aún no tuve tanta suerte! Puede ser una solución rápida, pero lo he visto tanto que probablemente estoy ciego a algo absolutamente obvio.
Así que te presento con todo mi código .htaccess
:
DirectoryIndex index.php
RewriteEngine on
RewriteRule ^download/([0-9]+)?/([0-9]+)x([0-9]+)/([^//.]+) image.php?id=$1&width=$2&height=$3&cropratio=$4&download=1 [L]
RewriteRule ^file/([0-9]+)?/([0-9]+)x([0-9]+)/([^//.]+) image.php?id=$1&width=$2&height=$3&cropratio=$4 [L]
RewriteRule ^preview/([0-9]+)?/([0-9]+)x([0-9]+)/([^//.]+) wallpaper_preview.php?id=$1&width=$2&height=$3&name=$4 [L]
RewriteRule ^thumbnail/([0-9]+)?/([0-9]+)x([0-9]+)/([^//.]+)/([^//.]+)/([^//.]+)/([^/]+) image.php?wallpaper_id=$1&width=$2&height=$3&cropratio=$4&align=$5&valign=$6&file=$7 [L]
RewriteRule ^cat/([0-9]+)?/([^//.]+)/p([0-9]+) index.php?task=category&id=$1&name=$2&page=$3 [L]
RewriteRule ^cat/([0-9]+)?/([^//.]+)/([0-9a-zA-Z?-]+)/p([0-9]+) index.php?task=category&id=$1&name=$2&sortby=$3&page=$4 [L]
RewriteRule ^cat/([0-9]+)?/([^//.]+)/([0-9a-zA-Z?-]+)-([0-9]+) index.php?task=category&id=$1&sortby=$3&page=$4 [L]
RewriteRule ^cat/([0-9]+)?/([^//.]+) index.php?task=category&id=$1&name=$2 [L]
RewriteRule ^tag/([^//.]+)/([0-9a-zA-Z?-]+)/([0-9]+) index.php?task=tag&t=$1&sortby=$2&page=$3 [L]
RewriteRule ^tag/([^//.]+) index.php?task=tag&t=$1 [L]
RewriteRule ^profile/([0-9]+)?/([^//.]+) index.php?task=profile&id=$1&name=$2 [L]
RewriteRule ^profile/comments/([0-9]+)?/([^//.]+) index.php?task=users_comments&id=$1&name=$2 [L]
RewriteRule ^page/([0-9]+) index.php?task=view_page&id=$1 [L]
RewriteRule ^register index.php?task=register [L]
RewriteRule ^lost-password index.php?task=lost_pass [L]
RewriteRule ^links index.php?task=links [L]
RewriteRule ^news/item/([0-9]+)/([^//.]+) index.php?task=news&id=$1 [L]
RewriteRule ^news/page([0-9]+) index.php?task=news&page=$1 [L]
RewriteRule ^members/([^//.]+)-([^//.]+)/page([0-9]+)? index.php?task=member_list&sort=$1&order=$2&page=$3 [L]
RewriteRule ^members index.php?task=member_list [L]
RewriteRule ^messages index.php?task=messages [L]
RewriteRule ^submit index.php?task=submit [L]
RewriteRule ^search/([^//.]+) index.php?task=search&q=$1 [L]
RewriteRule ^search index.php?task=search [L]
RewriteRule ^submit index.php?task=submit [L]
RewriteRule ^r-([0-9]+)?-([0-9]+)? go.php?id=$1&ref=$2 [L]
RewriteRule ^r-([0-9]+)? go.php?id=$1 [L]
RewriteRule ^([^//.]+)/([0-9]+)/([^//.]+) index.php?task=view&id=$2&name=$3 [L]
RewriteRule ^news/([^//.]+) index.php?task=news&name=$1 [L]
RewriteRule ^profile/([^//.]+) index.php?task=profile&name=$1 [L]
RewriteRule ^news index.php?task=news [L]
RewriteRule ^page/([^//.]+) index.php?task=view_page&name=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^//.]+)/([0-9a-zA-Z''?-]+)/([0-9]+) index.php?task=category&name=$1&sortby=$2&page=$3 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^//.]+)/([^//.]+) index.php?task=view&name=$2 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^//.]+) index.php?task=category&name=$1 [L]
## www reslove ##
RewriteCond %{HTTP_HOST} !^www/.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
## www reslove ##
## index reslove ##
Options +FollowSymLinks
RewriteCond %{THE_REQUEST} ^.*/index/.php
RewriteRule ^(.*)index.php$ http://www.epicwallpaper.net/$1 [R=301,L]
## index reslove ##
Esto es lo que he usado para mi última aplicación.
# redirect the main page to landing
##RedirectMatch 302 ^/$ /landing
# remove php ext from url
# https://.com/questions/4026021/remove-php-extension-with-htaccess
RewriteEngine on
# File exists but has a trailing slash
# https://.com/questions/21417263/htaccess-add-remove-trailing-slash-from-url
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.*)/+$ /$1 [R=302,L,QSA]
# ok. It will still find the file but relative assets won''t load
# e.g. page: /landing/ -> assets/js/main.js/main
# that''s we have the rules above.
RewriteCond %{REQUEST_FILENAME} !/.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}/.php -f
RewriteRule ^/?(.*?)/?$ $1.php
Justo debajo de RewriteEngine On
line, agregue:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R] # <- for test, for prod use [L,R=301]
para hacer cumplir una política de barra inclinada sin seguimiento.
Para aplicar una política de barra inclinada:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ /$1/ [L,R] # <- for test, for prod use [L,R=301]
EDITAR : comentó las R=301
partes porque, como se explica en un comentario:
¡Ten cuidado con eso
R=301
! Tenerlo allí hace que muchos navegadores guarden en caché el archivo .htaccess indefinidamente : de alguna manera se vuelve irreversible si no puede borrar el caché del navegador en todas las máquinas que lo abrieron. Al probar, mejor ve conR
simple oR=302
Después de completar sus pruebas, puede usar R=301
.
Para complementar la respuesta de Jon Lin, aquí hay una técnica de slash sin seguimiento que también funciona si el sitio web está ubicado en un directorio (como example.org/blog/):
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [R=301,L]
En aras de la exhaustividad, aquí hay una alternativa que enfatiza que REQUEST_URI
comienza con una barra (al menos en los archivos .htaccess
):
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /(.*)/$
RewriteRule ^ /%1 [R=301,L] <-- added slash here too, don''t forget it
Simplemente no use %{REQUEST_URI} (.*)/$
. Porque en el directorio raíz REQUEST_URI
es igual a /
, la barra diagonal REQUEST_URI
, y sería malinterpretada como una barra inclinada.
Si estás interesado en leer más:
(actualización: esta técnica ahora se implemented en Laravel 5.5)
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
## hide .html extension
# To externally redirect /dir/foo.html to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}/s([^.]+).html
RewriteRule ^ %1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}/s([^.]+)//s
RewriteRule ^ %1 [R=301,L]
## To internally redirect /dir/foo to /dir/foo.html
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^([^/.]+)$ $1.html [L]
<Files ~"^.*/.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</Files>
Esto elimina el código html o php si lo complementa. Le permite agregar una barra inclinada y aparecer tan bien como la url sin la barra al final, omitiendo el código 404. Además de un poco de seguridad adicional.